

package com.hazelcast.collection.impl.queue.operations;

import com.hazelcast.collection.impl.queue.QueueContainer;
import com.hazelcast.collection.impl.queue.QueueDataSerializerHook;
import com.hazelcast.spi.impl.NodeEngine;
import com.hazelcast.spi.impl.operationservice.MutatingOperation;
import com.hazelcast.spi.impl.proxyservice.ProxyService;

import java.util.UUID;

/**
 * Provides eviction functionality for Operations of Queue.
 */
public class CheckAndEvictOperation extends QueueOperation implements MutatingOperation {

    public CheckAndEvictOperation() {
    }

    public CheckAndEvictOperation(String name) {
        super(name);
    }

    @Override
    public void run() throws Exception {
        final QueueContainer queueContainer = getContainer();
        if (queueContainer.isEvictable()) {
            NodeEngine nodeEngine = getNodeEngine();
            ProxyService proxyService = nodeEngine.getProxyService();
            UUID source = nodeEngine.getLocalMember().getUuid();
            proxyService.destroyDistributedObject(getServiceName(), name, source);
        }
    }

    @Override
    public int getClassId() {
        return QueueDataSerializerHook.CHECK_EVICT;
    }
}
